[アップデート] Amazon EFSでIAM認証とアクセスポイントの設定が可能に
こんにちは、森です。
Amazon EFSで2つの新しい機能が導入されました。
- NFSクライアントのIAM認証と承認
- クライアントを識別し、IAMポリシーを使用してクライアント固有のアクセス許可を管理
- EFSアクセスポイント
- オペレーティングシステムのユーザーとグループの使用を強制し、オプションでファイルシステム内のディレクトリへのアクセスを制限
New for Amazon EFS – IAM Authorization and Access Points
試してみる
NFSクライアントのIAM認証と承認
IAMユーザー、グループ、またはロールで使用されるポリシーなどのIDベースのポリシーは、デフォルトのアクセス許可をオーバーライドできます
マネージメントコンソールからEFSファイルシステムを作成します。
ステップ3のクライアントアクセスを設定
で
- デフォルトでルートアクセスを無効にする
- デフォルトで読み取り専用アクセスを強制する
にチェックを入れ、ポリシーを保存します。 上記の状態のポリシーは以下の内容になります。
{ "Version": "2012-10-17", "Id": "efs-policy-wizard-67fe6bdb-916a-4c47-9435-ca4267f1b705", "Statement": [ { "Sid": "efs-statement-644737fc-aa90-407a-aa85-96d3bbf82408", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "elasticfilesystem:ClientMount", "Resource": "arn:aws:elasticfilesystem:ap-northeast-1:[MyAccount]:file-system/fs-0bacf32a" } ] }
elasticfilesystem:ClientMount
のみ許可されていることがわかります。
IAMポリシーでは以下のアクションを管理することができます。
ClientMount
読み取り専用アクセスでファイルシステムをマウントする許可を与えるClientWrite
ファイルシステムに書き込めるようにするClientRootAccess
ルートとしてファイルにアクセスする
では、作成したEFSをEC2(Linux)にマウントしてみます。
IAM認証、転送中の暗号化、またはその両方を使用してクライアントに接続するには、efs-utils
が必要なので、インストールされていない環境であればインストールします。
※ 2020/01/14時には最新のyumパッケージがなかったので、以下の手順でソースからビルドします
$ git clone https://github.com/aws/efs-utils $ cd efs-utils $ sudo yum -y install rpm-build $ make rpm $ sudo yum -y install build/amazon-efs-utils*rpm
セキュリティグループの設定も必要ですので、セキュリティを参照に設定しておきます。
SSHでEC2にログインし、mount
コマンドを利用してEFSファイルシステムをマウントしてみましょう。
$ sudo mkdir /mnt/shared $ sudo mount -t efs -o tls [作成したEFSのID] /mnt/shared $ ls -la /mnt/shared
マウント完了後、ファイルを保存してみます。
$ sudo touch /mnt/shared/hoge.txt touch: `/mnt/shared/hoge.txt' に touch できません: Read-only file system
現状では、デフォルトで読み取り専用アクセスを強制する 設定を入れていたので、ファイルの作成はできません。
この操作ができるようにIAMポリシーを作成し、EC2のIAMロールに紐づけます。
IAMポリシー
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite", "elasticfilesystem:ClientRootAccess" ], "Resource": "arn:aws:elasticfilesystem:ap-northeast-1:[MyAccount]:file-system/fs-0bacf32a" } ] }
IAM認証を使用して、mountコマンドにオプションを追加します(tlsIAM認証が機能するために必要です)
sudo mount -t efs -o tls,iam fs-e7a9f6c6 /mnt/shared
このマウントオプションを使用すると、EC2インスタンスプロファイルのIAMロールが、ルートアクセスを含むそのロールにアタッチされたアクセス許可とともに接続に使用されます。
$ sudo touch /mnt/shared/hoge.txt $ ls -la /mnt/shared/hoge.txt -rw-r--r-- 1 root root 0 1月 14 05:31 /mnt/shared/hoge.txt
ファイルの書き込みができました!
EFSアクセスポイント
NFS環境へのアプリケーションアクセスを簡単に管理でき、ファイルシステムへのアクセス時に使用するPOSIXユーザーとグループを指定し、ファイルシステム内のディレクトリへのアクセスを制限できます。
EFSコンソールで、ファイルシステム用に2つのアクセスポイントを作成してみます。
/alice
にはすべてのユーザーに読み取りおよび実行アクセス権を与え、/bob
にはオーナー以外は読み取り専用のアクセス権を与えてみました。
/alice
アクセスポイントをマウントしてみます。
$ sudo mount -t efs -o tls,accesspoint=[aliceのアクセスポイントID] [ファイルシステムID] /mnt/shared $ sudo touch /mnt/shared/datafile $ ls -la /mnt/shared -rw-r--r-- 1 1001 1001 0 1月 14 06:15 datafile
アクセスポイントのユーザーとグループIDを自動的に使用していることがわかります。
アクセスポイントを使用せずにマウントしてみます。
$ sudo mount -t efs -o tls fs-e7a9f6c6 /mnt/shared $ ls -la /mnt/shared/ alice/ bob/ hoge.txt $ ls -la /mnt/shared/alice/ -rw-r--r-- 1 1001 1001 0 1月 14 06:15 datafile
ファイルは/alice
ディレクトリに保存されていることがわかります。
アクセスポイントを使用してマウントすると、他のディレクトリにはアクセスできません。
/bob
アクセスポイントをマウントしてみます。
$ sudo mount -t efs -o tls,accesspoint=[bobのアクセスポイントID] [ファイルシステムID] /mnt/shared $ sudo touch /mnt/shared/datafile touch: `/mnt/shared/datafile' に touch できません: Permission denied
所有者以外は書き込みできませんね。
アクセスポイントですが、IAM認証と併用して特定のアクセスポイントのみ利用できるようにIAMロールを制限することも可能です。
以下のようにCondition
を追加します。
"Condition": { "StringEquals": { "elasticfilesystem:AccessPointArn" : "arn:aws:elasticfilesystem:us-east-2:[MyAccountID]:access-point/[許可するアクセスポイントのID]" } }
最後に
今回のアップデートにより別のAWSアカウント・特定のIAMロールにアクセス許可を付与するなど、より高度なポリシーを作成することができるようになり、ファイルシステム内のディレクトリへのアクセスを制限(読み取り専用アプリケーションや他のAWSアカウントとの共有など)できるようになりました。
比較的容易にできるようになっているので、データ共有やデータ構成を決定するときに役に立つのではないでしょうか。
ではでは。